# 导入路由相关类
from starlette.routing import Route, WebSocketRoute, Mount

# 导入静态文件处理类
from starlette.staticfiles import StaticFiles


# 定义首页处理函数
async def homepage(request):
    # 返回简单的文本响应
    from starlette.responses import PlainTextResponse

    return PlainTextResponse("首页")


# 定义用户详情处理函数
async def user_detail(request):
    # 获取路径参数中的用户 ID
    user_id = request.path_params["user_id"]
    from starlette.responses import JSONResponse

    return JSONResponse({"user_id": user_id})


# 定义 WebSocket 端点
async def websocket_endpoint(websocket):
    # 接受 WebSocket 连接
    await websocket.accept()
    # 发送欢迎消息
    await websocket.send_text("WebSocket 连接成功")


# 定义路由列表
routes = [
    # HTTP 路由：首页
    Route("/", homepage),
    # HTTP 路由：用户详情，支持路径参数和类型转换
    Route("/users/{user_id:int}", user_detail),
    # WebSocket 路由
    WebSocketRoute("/ws", websocket_endpoint),
    # 静态文件挂载
    Mount("/static", app=StaticFiles(directory="static"), name="static"),
]


# 定义主函数
def main():
    # 导入必要的模块
    from starlette.applications import Starlette
    import uvicorn

    # 创建应用实例
    app = Starlette(routes=routes)
    # 启动服务器
    uvicorn.run(app, host="127.0.0.1", port=8000)


# 脚本入口
if __name__ == "__main__":
    main()
